home *** CD-ROM | disk | FTP | other *** search
- /*******************************************************************************
- +
- + LEDA 2.1.1 11-15-1991
- +
- +
- + set.h
- +
- +
- + Copyright (c) 1991 by Max-Planck-Institut fuer Informatik
- + Im Stadtwald, 6600 Saarbruecken, FRG
- + All rights reserved.
- +
- *******************************************************************************/
-
-
-
-
- #ifndef SETH
- #define SETH
-
- //------------------------------------------------------------------------------
- // set
- //
- // Stefan Naeher (1989)
- //------------------------------------------------------------------------------
-
- #include <LEDA/basic.h>
-
- #ifndef RBTREEH
- #include <LEDA/rb_tree.h>
- #endif
-
- #define set(keytype) name2(keytype,set)
-
- #define setdeclare(keytype)\
- \
- class set(keytype) : public rb_tree {\
- \
- rb_tree_node* iterator;\
- \
- int cmp(ent& x, ent& y) const { return compare(*(keytype*)&x,*(keytype*)&y); }\
- void clear_key(ent& x) const { Clear(*(keytype*)&x); }\
- void copy_key(ent& x) const { Copy(*(keytype*)&x); }\
- \
- public:\
- void insert(keytype y) { rb_tree::insert(Ent(y),0); }\
- void del(keytype y) { rb_tree::del(Ent(y)); }\
- bool member(keytype y) const { return (rb_tree::lookup(Ent(y))!=nil); }\
- keytype choose() const { return keytype(rb_tree::key(rb_tree::min())); }\
- \
- void init_iterator() { iterator = rb_tree::first_item(); }\
- bool next_element(keytype& y) { if (iterator==0) return false;\
- else { void* p = rb_tree::key(iterator);\
- y = *(keytype*)&p;\
- iterator=rb_tree::next_item(iterator);\
- return true; } \
- }\
- \
- set(keytype)& operator=(const set(keytype)& S)\
- { rb_tree::operator=((rb_tree&) S); return *this; }\
- \
- set(keytype)() {}\
- set(keytype)(const set(keytype)& S) : rb_tree((rb_tree&) S) {}\
- ~set(keytype)() { clear(); }\
- } ;
-
- #endif
-
-